package cn.edu.ctbu.scoremg.service;

import cn.edu.ctbu.scoremg.constant.REnum;
import cn.edu.ctbu.scoremg.dao.CourseRepository;
import cn.edu.ctbu.scoremg.entity.Course;
import cn.edu.ctbu.scoremg.exception.RException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class CourseService {

    @Autowired
    private CourseRepository courseRepository;

    public List<Course> getAll() {
        return courseRepository.findAll();
    }

    public Page<Course> getAll(Pageable pageable) {
        return courseRepository.findAll(pageable);
    }

    public Page<Course> getAll(Example<Course> example, Pageable pageable) {
        return courseRepository.findAll(example, pageable);
    }

    /**
     * 按id查询课程
     * @param id 课程ID
     * @return 课程对象
     */
    public Course findById(String id) {
        return courseRepository.findById(id).orElse(null);
    }

    /**
     * 按课程名称查询
     * @param name 课程名称
     * @return 课程列表
     */
    public List<Course> findByName(String name) {
        return courseRepository.findByNameLike(name);
    }

    /**
     * 按教师编号查询课程
     * @param tno 教师编号
     * @return 课程列表
     */
    public List<Course> findByTeacherNo(String tno) {
        return courseRepository.findByTno(tno);
    }

    /**
     * 新增课程
     * @param course 课程对象
     * @return 保存后的课程对象
     */
    public Course add(Course course) {
        return courseRepository.save(course);
    }

    /**
     * 更新课程信息
     * @param course 课程对象
     * @return 更新后的课程对象
     */
    public Course update(Course course) {
        return courseRepository.save(course);
    }

    /**
     * 删除课程
     * @param id 课程ID
     */
    public void delete(String id) {
        courseRepository.deleteById(id);
    }

    /**
     * 批量删除课程
     * @param ids 课程ID列表
     */
    public void deleteBatch(List<String> ids) {
        courseRepository.deleteAllById(ids);
    }

    /**
     * 按课程代码查询
     * @param code 课程代码
     * @return 课程对象
     */
    public Course findByCode(String code) {
        return courseRepository.findByCode(code);
    }

    /**
     * 按课程代码和教师编号查询
     * @param code 课程代码
     * @param tno 教师编号
     * @return 课程列表
     */
    public List<Course> findByCodeAndTeacherNo(String code, String tno) {
        return courseRepository.findByCodeAndTno(code, tno);
    }
}